﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace IncrementSearchableDBComboBox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            InitDataSource();
        }

        public static void AssignSuggestAppend(ComboBox cbx, string  displayMember, string[] suggestCollection)
        {
            cbx.AutoCompleteSource = AutoCompleteSource.CustomSource;
            cbx.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            cbx.DisplayMember = displayMember;
        }

        private void InitDataSource()
        {
            #region lstKhoa = ...;
            var lstKhoa = new List<Khoa>();
            lstKhoa.Add(new Khoa()
            {
                MaKhoa = "1",
                TenKhoa = "Khoa Công nghệ Thông tin"
            });
            lstKhoa.Add(new Khoa()
            {
                MaKhoa = "2",
                TenKhoa = "Khoa Công nghệ"
            });
            lstKhoa.Add(new Khoa()
            {
                MaKhoa = "3",
                TenKhoa = "Khoa Vật lý"
            });
            lstKhoa.Add(new Khoa()
            {
                MaKhoa = "4",
                TenKhoa = "Vật lý điện tử - viễn thông"
            });
            #endregion

            // Thiết lập chế độ autoComplete
            cbxKhoa2.AutoCompleteSource = AutoCompleteSource.CustomSource;
            cbxKhoa2.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            cbxKhoa2.DataSource = lstKhoa;
            cbxKhoa2.DisplayMember = "TenKhoa";

            // Xác định AutoCompleteCustomeSource
            var tenKhoaSet = new AutoCompleteStringCollection();
            tenKhoaSet.AddRange(lstKhoa.Select(e => e.TenKhoa).ToArray());
            cbxKhoa2.AutoCompleteCustomSource = tenKhoaSet;

            // Các tinh chỉnh nâng cao
            cbxKhoa2.Leave += (oSender, oE) =>
            {
                var cbx = oSender as ComboBox;
                if (cbx == null)
                    return;
                cbx.BackColor = cbx.SelectedItem == null ? Color.LightPink : SystemColors.Window;
            };

            cbxKhoa2.KeyDown += (oSender, oE) =>
            {
                if (oE.KeyCode != Keys.Enter)
                    return;
                var cbx = oSender as ComboBox;
                if (cbx == null)
                    return;
                cbx.BackColor = cbx.SelectedItem == null ? Color.LightPink : SystemColors.Window;
                // cbx.Select(0, 0);
            };
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Khoa khoa = null;
            if (cbxKhoa2.SelectedItem != null)
                khoa = cbxKhoa2.SelectedItem as Khoa;
            if (khoa == null)
                MessageBox.Show("selectedItem = null");
            else
                MessageBox.Show(string.Format("selectedIndex = {0}, selectedItem = {1} ({2})", 
                    cbxKhoa2.SelectedIndex, khoa.TenKhoa, khoa.MaKhoa));
        }
    }
}
